<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <button id="but">生成</button>
  <input type="file" onchange="upload(this)" />
</body>

<script>
  function saveJSON(data, filename) {
    if (!data) {
      alert('保存的数据为空');
      return;
    }
    if (!filename) filename = 'json.json';
    if (typeof data === 'object') data = JSON.stringify(data, undefined, 4);

    var blob = new Blob([data], { type: 'text/json' }),
      e = document.createEvent('MouseEvents'),
      a = document.createElement('a');
    a.download = filename
    a.href = window.URL.createObjectURL(blob)
    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':')
    e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
    a.dispatchEvent(e)
  }

  function upload(input) {
    var file = input.files[0];
    filename = file.name.split(".")[0];
    var reader = new FileReader();
    reader.onload = function () {
      let arr = this.result.match(/\d+\s+\d+\s+\d+\r/g).map((item) => {
        const o = item.match(/\d+/g);
        return {
          id: o[0],
          count: o[1],
          num: o[2]
        }
      });
      saveJSON(arr, 'sudoku.json');
    }
    reader.readAsText(file);
  }
</script>

</html>